<?php
/**
 * 验证字符长度
 */
class LengthValidator extends AbstractValidator
{
	/**
	 * 最大长度
	 * @var integer
	 */
	public $max;
	/**
	 * 最小长度
	 * @var integer
	 */
	public $min;
	/**
	 * 是否允许为空
	 * @var boolean
	 */
	public $allowEmpty=true;
	/**
	 * 字符编码，当有给这个变量赋值时，用mb_strlen()计算长度，不然默认用strlen();
	 * @var string
	 */
	public $encoding;

	/**
	 * 验证方法
	 * @param string $label  显示在页面的名称
	 * @param mix $value 要验证的值
	 */	
	public function validate($label,$value){
		if($this->allowEmpty && $this->isEmpty($value))
			return true;
		if($this->max===null && $this->min===null) return '需提供max或者min参数';
		if(function_exists('mb_strlen') && $this->encoding!==null)
			$length=mb_strlen($value,$this->encoding);
		else
			$length=strlen($value);
		if($this->min!==null && $length<$this->min){
			return $this->message($label);
		}
		if($this->max!==null && $length>$this->max){
			return $this->message($label);
		}
		return true;
	}
	/**
	 * 验证失败的信息
	 * @param string $label
	 */
	public function message($label){		
		if($this->language==='cn'){
			if($this->max!==null && $this->min!==null)
				return $label.'的长度必须在'.$this->min.'到'.$this->max.'个字符之间';
			else if($this->max!==null)
				return $label.'的长度不能大于'.$this->max.'个字符';
			else if($this->min!==null)
				return $label.'的长度不能少于'.$this->min.'个字符';
		}		
	}
}

